The HyperText Transfer Protocol (HTTP) Live Streaming (HLS) standard provides for the segmentation of a multimedia program by a media server into a sequence of relatively small segments. The server may provide to a client device a playlist, or “index file,” listing separate identifiers (typically uniform resource identifiers (URIs)) for each these segments. Using this playlist and the segment URIs listed therein, the client device then may initiate the download of each segment in the listed order using standard HTTP messaging. By utilizing standard HTTP protocols in conjunction with other widely-adopted protocols, such as HyperText Markup Language (HTML) standards, HLS enables conventional web servers to effectively distribute multimedia programs to a wide variety of client devices.
HLS supports a multiple bitrate scheme whereby a media server can present different encodings of the same multimedia program so that the version of the multimedia program served to the client device can have a bitrate suitable for the network performance of the connection between the media server and the client device. Typically, the media server provides a separate playlist, called a “variant playlist” or “variant index file,” for each encoding of the multimedia program. In recognition that the network performance may fluctuate over time, HLS clients can employ a conventional adaptive bitrate selection scheme whereby the HLS client can switch between different encodings (i.e., different bitrates) of a multimedia program being streamed by dynamically switching between variant playlists for the same multimedia program based on the changing bitrate supported by the changing available bandwidth.
While useful in adapting the quality of the streamed multimedia to the available bandwidth of the network connection, conventional adaptive bitrate schemes can negatively impact the playback of the streamed multimedia at the client device, as well as unnecessarily consume resources at the media server, due to the issuance of duplicate requests for different bitrate versions of the same segment by a client device. Upon receipt of a playlist, the HLS media player at the client device quickly moves to acquire listed segments in an accessed playlist, typically for internal buffering purposes for playback of the multimedia to the end user. While one or more requested segments are being acquired from the media server, the conventional adaptive bitrate logic of the HLS media player may decide that it is taking an excessive period of time to transfer the requested segments in their current encoding, and thus the adaptive bit rate logic may decide to flush the received portions of the requested segments from the buffer of the HLS media player and switch to a variant playlist with a lower bitrate encoding.
As the requested segments were flushed by the HLS media player, the HLS media player again requests these same segments using the newly-acquired variant playlist. However, from the perspective of the media server, these segments were already served. As such, the media server may have flushed its copies of the segments, or may not have already-processed versions of the segments in the target bitrate. As such, the media server may have to repeat the encoding of the multimedia content corresponding to these segments, which can consume significant processing resources (particularly for intensive operations such as transcoding) and which can lead to a significant delay in streaming the requested segments to the client device while the media server recreates the segments. Moreover, in certain situations, such as where the multimedia program is a live broadcast, the media server may no longer store or otherwise have access to the multimedia content corresponding to the requested segments, and thus be unable to recreate the segments for the HLS media player. Whether playback is delayed due to the time needed by the media server to recreate the repeat-requested segments or is disrupted due to the subsequent unavailability of the repeat-requested segments, the end results can be very unpleasant and noticeable to the end user.